<!doctype html>
<html>
  <head itemscope itemtype="http://schema.org/WebPage">
    <!-- <link href="style.css" rel="stylesheet" /> -->
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"
    />
    <title>GraphQL Voyager</title>
    <meta itemprop="name" property="og:title" content="GraphQL Voyager" />
    <meta
      property="og:description"
      content="Represent any GraphQL API as an interactive graph"
    />
    <meta
      itemprop="description"
      name="description"
      content="Represent any GraphQL API as an interactive graph"
    />
    <link
      rel="icon"
      type="image/png"
      sizes="32x32"
      href="icons/favicon-32x32.png"
    />
    <link
      rel="icon"
      type="image/png"
      sizes="96x96"
      href="icons/favicon-96x96.png"
    />
    <link
      rel="icon"
      type="image/png"
      sizes="16x16"
      href="icons/favicon-16x16.png"
    />
    <meta itemprop="image" property="og:type" content="website" />
    <meta
      itemprop="image"
      property="og:url"
      content="https://apis.guru/graphql-voyager/"
    />
    <meta
      itemprop="image"
      property="og:image"
      content="https://apis.guru/graphql-voyager/images/cover-image.png"
    />
    <meta name="theme-color" content="#ffffff" />
    <style>
      body {
        padding: 0;
        margin: 0;
        width: 100%;
        height: 100vh;
        overflow: hidden;
      }

      #root {
        height: 100%;
        position: relative;
      }

      #mobile-warning {
        display: none;
      }

      #mobile-warning.hidden {
        display: none;
      }

      @media screen and (max-width: 767px) {
        #mobile-warning {
          display: block;

          position: absolute;
          left: 0;
          right: 0;
          top: 0;
          bottom: 0;
          background: rgba(255, 255, 255, 0.9);
          color: #0b2840;
          z-index: 100;
          padding: 20px;
          text-align: center;
          display: flex;
          flex-direction: column;
          justify-content: center;
        }

        #mobile-warning small {
          font-size: 1em;
        }

        #mobile-warning h1 {
          line-height: 1;
        }

        #mobile-warning a {
          display: block;
          text-decoration: none;
          margin: 1em 0;
          font-weight: bold;
          font-size: 1.4em;
          color: #42a0dd;
        }
      }
    </style>
    <link rel="stylesheet" href="./voyager.css" />
    <script src="./voyager.standalone.js"></script>
  </head>
  <body>
    <script type="module">
      // FIXME: switch to import
      const { renderVoyager, voyagerIntrospectionQuery } = GraphQLVoyager;
      const PRESETS = {
        'Star Wars': await fetchPreset('swapi'),
        Yelp: await fetchPreset('yelp'),
        'Shopify Storefront': await fetchPreset('shopify'),
        GitHub: await fetchPreset('github'),
      };

      const defaultPreset = PRESETS['Star Wars'];

      const searchParams = new URLSearchParams(window.location.search);
      const url = searchParams.get('url');
      const withCredentials = searchParams.get('withCredentials');

      const introspection =
        url != null ? fetchIntrospection(url, withCredentials) : defaultPreset;

      renderVoyager(document.getElementById('root'), {
        introspection,
        introspectionPresets: PRESETS,
        allowToChangeSchema: true,
        hideVoyagerLogo: false,
      });

      async function fetchPreset(name) {
        const response = await fetch(`./presets/${name}_introspection.json`);
        return response.json();
      }

      async function fetchIntrospection(url, withCredentials) {
        const response = await fetch(url, {
          method: 'post',
          headers: {
            Accept: 'application/json',
            'Content-Type': 'application/json',
          },
          body: JSON.stringify({ query: voyagerIntrospectionQuery }),
          ...(withCredentials === 'true'
            ? { credentials: 'include', mode: 'cors' }
            : {}),
        });
        return response.json();
      }
    </script>
    <main id="root">
      <h1 style="text-align: center; color: #5d7e86">Loading...</h1>
    </main>
    <a
      href="https://github.com/APIs-guru/graphql-voyager"
      class="github-corner"
      aria-label="View source on Github"
      ><svg
        width="80"
        height="80"
        viewBox="0 0 250 250"
        style="
          fill: #5d7e86;
          color: #fff;
          position: absolute;
          top: 0;
          border: 0;
          right: 0;
        "
        aria-hidden="true"
      >
        <path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>
        <path
          d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2"
          fill="currentColor"
          style="transform-origin: 130px 106px"
          class="octo-arm"
        ></path>
        <path
          d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z"
          fill="currentColor"
          class="octo-body"
        ></path></svg></a
    ><style>
      .github-corner:hover .octo-arm {
        animation: octocat-wave 560ms ease-in-out;
      }
      @keyframes octocat-wave {
        0%,
        100% {
          transform: rotate(0);
        }
        20%,
        60% {
          transform: rotate(-25deg);
        }
        40%,
        80% {
          transform: rotate(10deg);
        }
      }
      @media (max-width: 500px) {
        .github-corner:hover .octo-arm {
          animation: none;
        }
        .github-corner .octo-arm {
          animation: octocat-wave 560ms ease-in-out;
        }
      }
    </style>
    <div id="mobile-warning">
      <h1>Best served on bigger screen sizes</h1>
      <small>
        This tool presents complex graphs. Use it on bigger screen size for
        better experience
      </small>
      <a id="skip_warning" href="#"> GOT IT </a>
    </div>
    <script>
      var skipBtn = document.getElementById('skip_warning');
      var warning = document.getElementById('mobile-warning');
      if (document.cookie.indexOf('skip_mobile_warning=true') > -1) {
        warning.classList.add('hidden');
      } else {
        var handler = function () {
          warning.classList.add('hidden');
          document.cookie =
            'skip_mobile_warning=true; expires=Fri, 31 Dec 9999 23:59:59 GMT';
        };
        skipBtn.addEventListener('touchstart', handler, false);
        skipBtn.addEventListener('click', handler, false);
      }
    </script>
  </body>
</html>
